Reliability of storage systems such as NAND flash memories may decline as higher storage density is achieved with multi-level cell (MLC)/triple-level cell (TLC) technologies. Error correcting codes (ECC) can be used in storage systems to detect and/or correct errors in the data and increase performance and efficiency of these systems. Several classes of ECC codes exist in the art, such as Bose-Chaudhuri-Hocquenghem (BCH) codes, low density parity check codes (LDPC), turbo product codes (TPC), and the like.
In recent ECC research developments, product codes have shown promising results for their viable application in storage applications, such as NAND flash storage. In addition, in some scenarios, generalized product codes (GPC) have shown to outperform LDPC codes, BCH codes and/or TPC in terms of codeword error rate (CER) performance. Complexity of encoder/decoders for product codes is smaller compared to complexity of encoder/decoders used for LDPC and/or BCH codes. Therefore, product codes are suitable candidates for storage applications. There is a need in the art for methods to improve performance of the product codes.